import { initMixin } from './init'
import { stateMixin } from './state'
import { renderMixin } from './render'
import { eventsMixin } from './events'
import { lifecycleMixin } from './lifecycle'
import { warn } from '../util/index'

// 此处不用class的原因是因为方便后续给vue实例，混入实例成员
// vue构造函数
function Vue (options) {
  // 区分环境
  if (process.env.NODE_ENV !== 'production' &&
    !(this instanceof Vue)
  ) {
    warn('Vue is a constructor and should be called with the `new` keyword')
  }
  // initMixin函数里注入了_init方法
  this._init(options)
}
// 以下整体作用，就是给vue的方法混入一些成员

// 注册vm的_init方法，初始化vm
initMixin(Vue)
// 注册vm的$data/$proprs/$set/$delete/$watch
stateMixin(Vue)
// 初始化事件的相关方法
eventsMixin(Vue)
// 初始化生命周期相关的混入方法
//  _update 、 $forceUpdate 、$destroy 、
lifecycleMixin(Vue)

// 混入render
// $nextTick \ _render ()
renderMixin(Vue)

export default Vue
